<?php
class Admin_Form_Trip extends TBB_Form
{		
	public function init() {			
		// set attributes for main form
		$this->addAttribs(array(
			'class' => 'span-14',
			//'style' => 'background-color: #ccc;'
		));
		
		///////////////////// create id element  /////////////////////
		$id = $this->_createTripIDElement();		

		///////////////////// create boarding point element /////////////////////		
		$departureTime = $this->_createTripElement('text', 'departureTime', 'Ngày giờ đi', 'Làm ơn nhập ngày giờ đi', true);										      	
		
		///////////////////// create dropping point element  /////////////////////
		$arrivalTime = $this->_createTripElement('text', 'arrivalTime', 'Ngày giờ đến', 'Làm ơn nhập ngày giờ đến', true);
		
		///////////////////// create fare element  /////////////////////		
		$fare = $this->_createTripElement('text', 'fare', 'Giá vé', 'Làm ơn nhập giá vé', false, true);
		
		/////////////////// create submit element  /////////////////////
		$submit = $this->_createSubmitButton();
		
		// add all elements
		$this->addElements(array($id, $departureTime, $arrivalTime, $fare, $submit));
		$this->addDisplayGroup(array('tripID', 'departureTime', 'arrivalTime', 'fare', 'submit'),
							  'tripGroup',
							  array('class' => 'fieldsetForm span-7')
		);
		
		// set decorators for form
		$this->setDecorators($this->_formDecorators);
		$this->setDisplayGroupDecorators($this->_displayGroupDecorators);
	}	
	
	private function _createTripIDElement()
	{
		$id = $this->createElement ( 'hidden', 'tripID' );
		$id->setDecorators ( $this->_hiddenDecorators );
		$id->setAttribs(array(
			'class' => 'span-4',
		));
		return $id;
	}
	
	public function addBusElement($buses = array())
	{
		$bus = $this->createElement('select', 'bus')
					 ->setLabel('Xe chở: ')
			 		 ->setMultiOptions($buses)
			 		 ->setOrder(2);
		$bus->setAttribs(array(
			'class' => 'span-6'
		));
		$bus->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$bus->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
		
		// add bus element to display group
		$this->getDisplayGroup('tripGroup')->addElement($bus);	
	}
	
	public function addRouteElement($routes = array())
	{
		$route = $this->createElement('select', 'route')
					   ->setLabel('Tuyến: ')
			 		   ->setMultiOptions($routes)
			 		   ->setOrder(1);
		$route->setAttribs(array(
			'class' => 'span-6'
		));
		$route->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$route->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
		
		// add route element to display group
		$this->getDisplayGroup('tripGroup')->addElement($route);	
	}
	
	public function setRouteValue($route)
	{
		if($this->getDisplayGroup('tripGroup')->getElement('route')) {
			$this->getDisplayGroup('tripGroup')->getElement('route')->setValue($route);
		}
	}
	
	public function setBusValue($bus)
	{
		if($this->getDisplayGroup('tripGroup')->getElement('bus')) {
			$this->getDisplayGroup('tripGroup')->getElement('bus')->setValue($bus);
		}
	}
	
	private function _createTripElement($type, $name, $labelText, $notEmptyMessage, $useDatetimeValidator = false, $useIntValidator = false)
	{
		
		$arrivalTimeNotEmptyValidator = $this->_createNotEmptyValidator($notEmptyMessage);
		$element = $this->createElement($type, $name)
						 	  ->setLabel ($labelText)
						      ->setRequired ( true )
						 	  ->addFilter ( 'StripTags' )
						 	  ->setValidators(array(array($arrivalTimeNotEmptyValidator, true)));	
		if($useDatetimeValidator) {
			$datetimeValidator = $this->_createDatetimeValidator('Ngày giờ không hợp lệ. Ngày giờ phải có dạng dd:MM:yyyy HH:mm:ss');
			$element->addValidator($datetimeValidator, true);
		}
		if($useIntValidator) {
			$intValidator = $this->_createIntValidator('Giá vé không hợp lệ. Giá vé phải là số');
			$element->addValidator($intValidator, true);
		}		
		$element->setAttribs(array(
			'class' => 'span-6 last'
		));	
		$element->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$element->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
		return $element;		
	}
	
	private function _createSubmitButton()
	{
		$submit = $this->createElement ( 'submit', 'submit' );
		$submit->setLabel ( 'Chấp nhận' );
		$submit->setDecorators($this->_submitDecorators);
		$submit->getDecorator('HtmlTag')->setOption('id', 'createTripButton');
		$submit->setAttribs(array(
			'class' => 'span-4 last submitDecorator',
		));
		return $submit;
	}

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/////////////////////////////// BELOW ARE DEPRECATED FUNCTIONS //////////////////////////////
	public function addFromToCityElement($cities = array())
	{
		$diffCitiesValidator = new TBB_Validate_DifferentCities();
		// create from element
		$from = $this->createElement('select', 'from')
					 ->setLabel('Từ: ')
			 		 ->setMultiOptions($cities)
			 		 ////////// Bug here!!! The validator not working! wtf???? ////////////
			 		 //->setValidators(array($diffCitiesValidator))
			 		 ->setOrder(1);
		$from->setAttribs(array(
			'class' => 'span-6'
		));
		$from->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$from->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
				
		// create to element		
		$to = $this->createElement('select', 'to')
				   ->setLabel('Đến: ')
			 	   ->setMultiOptions($cities)
			 	   ->setValue('Bắc Giang')
			 	   //->setValidators(array($diffCitiesValidator))				   
			 	   ->setOrder(2);

		$to->setAttribs(array(
			'class' => 'span-6'
		));		
		$to->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$to->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');		
		
		// add from and to elements to display group
		$this->getDisplayGroup('tripGroup')->addElements(array($from, $to));		
	}
	
	public function setFromToCityValue($fromValue, $toValue)
	{		
		if($this->getDisplayGroup('tripGroup')->getElement('from') &&
		   $this->getDisplayGroup('tripGroup')->getElement('to')) {
			$this->getDisplayGroup('tripGroup')->getElement('from')->setValue($fromValue);
			$this->getDisplayGroup('tripGroup')->getElement('to')->setValue($toValue);
		}
	}
	
	public function _createDepartureTimeElement()
	{
		$departureTimeRegexValidator = $this->_createDatetimeValidator('Ngày giờ không hợp lệ. Ngày giờ phải có dạng dd:MM:yyyy HH:mm:ss');
		$departureTimeNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập trạm đi');
		$departureTime = $this->createElement('text', 'departureTime')
						 	  ->setLabel ( 'Ngày giờ đi: ' )
						      ->setRequired ( true )
						 	  ->addFilter ( 'StripTags' )
						 	  ->setValidators(array(array($departureTimeNotEmptyValidator, true),
						 	  						array($departureTimeRegexValidator, true)
						 	  ));

		$departureTime->setAttribs(array(
			'class' => 'span-6 last'
		));	
		$departureTime->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$departureTime->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
		return $departureTime;
	}
	
	public function _createArrivalTimeElement()
	{
		$arrivalTimeRegexValidator = $this->_createDatetimeValidator('Ngày giờ không hợp lệ. Ngày giờ phải có dạng dd:MM:yyyy HH:mm:ss');
		$arrivalTimeNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập trạm đến');
		$arrivalTime = $this->createElement('text', 'arrivalTime')
						 	  ->setLabel ( 'Ngày giờ đến: ' )
						      ->setRequired ( true )
						 	  ->addFilter ( 'StripTags' )
						 	  ->setValidators(array(array($arrivalTimeNotEmptyValidator, true),
						 	  						array($arrivalTimeRegexValidator, true)
						 	  ));
		
		$arrivalTime->setAttribs(array(
			'class' => 'span-6 last'
		));	
		$arrivalTime->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$arrivalTime->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
		return $arrivalTime;
	}
	
	public function _createFareElement()
	{
		$fareNotEmptyValidator = $this->_createNotEmptyValidator('Làm ơn nhập giá vé');
		$fare = $this->createElement('text', 'fare')
						 	  ->setLabel ( 'Giá vé: ' )
						      ->setRequired ( true )
						 	  ->addFilter ( 'StripTags' )
						 	  ->setValidators(array(array($fareNotEmptyValidator, true)
						 	  ));
		$fare->setAttribs(array(
			'class' => 'span-6 last'
		));	
		$fare->getDecorator('Label')->setOption('class', 'span-4 labelDecorator');
		$fare->getDecorator('Errors')->setOption('class', 'span-6 errorDecorator');
		return $fare;
	}
}